package bancosys.tec.services.validation;

import java.util.LinkedList;
import java.util.List;

import jmine.tec.services.api.ServicesPage;
import jmine.tec.services.api.validation.ServicesPageValidator;

/**
 * Implementacao de validator de servicesPages que executa um conjunto de validadores em sequencia.
 * 
 * @author Rafael Volpato
 */
public class CompositeServicesPageValidator implements ServicesPageValidator {

    private List<ServicesPageValidator> validators;

    /**
     * Construtor.
     */
    public CompositeServicesPageValidator() {
        this.validators = new LinkedList<ServicesPageValidator>();
    }

    /**
     * Adiciona um novo validator.
     * 
     * @param validator validator
     */
    public void addValidator(ServicesPageValidator validator) {
        if (this.validators == null) {
            this.validators = new LinkedList<ServicesPageValidator>();
        }

        this.validators.add(validator);
    }

    /**
     * Executa a validação de uma lista de páginas de serviços.
     * 
     * @param servicesPages lista de páginas de serviços.
     * @return uma lista com mensagens de erros.
     */
    public List<String> validate(List<ServicesPage> servicesPages) {
        List<String> errors = new LinkedList<String>();

        for (ServicesPageValidator validator : this.validators) {
            errors.addAll(validator.validate(servicesPages));
        }

        return errors;
    }
}
